home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Browsers, Managers & Extensions / Firefox Backup Extension 6.0.3 / chrome / febe.jar / content / febeUDBu.js < prev    next >
Text File  |  2008-08-06  |  16KB  |  443 lines

  1. // author: Chuck Baker
  2. // contact: firefox@customsoftwareconsult.com
  3. // FEBE User-defined backup routines
  4.  
  5. var febeUDBuList = [];
  6. var febeUDBuAction = new Number;    // 1=New, 2=Edit, 3=Delete
  7. var febeUDBuTrxPending = new Boolean(false);
  8.  
  9. function febeUDBuObj(Label, Type, Description, Path, Include){
  10.     this.Label = Label;
  11.     this.Type = Type;
  12.     this.Description = Description;
  13.     this.Path = Path;
  14.     this.Include = Include; 
  15.     return true;
  16.  
  17. }//febeUDBuObj
  18.  
  19. function febeLoadUDBu(){
  20.     var febeUDBuWin = window.openDialog("chrome://febe/content/febeUDBu.xul", febeMsg[147], "chrome,alwaysRaised,centerscreen,resizable");    
  21.     return true;
  22. }//febeLoadUDBu()
  23.  
  24. function febeNewUDBu(){
  25.     febeUDBuDisableAll();
  26.     document.getElementById("febeUDBuCaption").value = febeMsg[136];
  27.     febeUDBuAction = 1;
  28.     febeUDBuEnableNew();
  29.     febeUDBuStatusMsg("");
  30.     return true;
  31. }//febeNewUDBu()
  32.  
  33. function febeEditUDBu(){
  34.     febeUDBuDisableAll();
  35.     document.getElementById("febeUDBuCaption").value = febeMsg[137];
  36.     febeUDBuAction = 2;
  37.     febeUDBuPopulateListbox();
  38.     febeUDBuStatusMsg("");
  39.     return true;
  40. }//febeEditUDBu()
  41.  
  42. function febeDeleteUDBu(){
  43.     febeUDBuDisableAll();
  44.     document.getElementById("febeUDBuCaption").value = febeMsg[138];
  45.     febeUDBuAction = 3;
  46.     febeUDBuPopulateListbox();
  47.     febeUDBuStatusMsg("");
  48.     return true;
  49. }//febeDeleteUDBu()
  50.  
  51. function febeSelUDBu(){
  52.     var dd = document.getElementById("febeUDBuType");
  53.     if(dd.selectedIndex == -1){
  54.         var tmp = febeMsg[165];
  55.         febeAlert(tmp);
  56.         return false;
  57.     }//if
  58.     var type = dd.selectedIndex;
  59.     switch(type){
  60.         case 0:        // File
  61.             febeSelUDBuFile();
  62.             break;
  63.         case 1:        // Folder
  64.             febeSelUDBuFolder();
  65.             break;
  66.     }//switch
  67.     return true;
  68. }//febeSelUDBu(){
  69.  
  70. function febeSelUDBuFile(){
  71.   // Select a file to backup
  72.     var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
  73.     fp.init(window, febeMsg[133], Ci.nsIFilePicker.modeOpen);
  74.     fp.appendFilters(Ci.nsIFilePicker.filterAll);
  75.     
  76.     // Set the default directory to the current profile directory
  77.     febeProfDir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
  78.     fp.displayDirectory = febeProfDir;
  79.  
  80.     var rv = fp.show();
  81.     if (rv == Ci.nsIFilePicker.returnOK){
  82.         rv = fp.file;
  83.         document.getElementById("febeUDBuSource").value = rv.path;
  84.         return true;
  85.     }//if
  86.     return false;
  87. }//febeSelUDBuFile()
  88.  
  89. function febeSelUDBuFolder(){
  90.   // Select a folder to backup
  91.     var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
  92.     fp.init(window, febeMsg[159], Ci.nsIFilePicker.modeGetFolder);
  93.     fp.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterText);
  94.  
  95.     // Set the default directory to the current profile directory
  96.     febeProfDir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
  97.     fp.displayDirectory = febeProfDir;
  98.  
  99.     var rv = fp.show();
  100.     if (rv == Ci.nsIFilePicker.returnOK){
  101.         rv = fp.file;
  102.         document.getElementById("febeUDBuSource").value = rv.path;
  103.         return true;
  104.     }//if
  105.     return false;
  106. }//febeSelUDBuFolder()
  107.  
  108. function febeUDBuInit(){
  109.     febeSetMsgs();
  110.   // Get data from file - create template if needed
  111.     febeDataFile = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
  112.     febeDataFile.append(FEBEDATAFILE);
  113.     var JSON = Cc["@mozilla.org/dom/json;1"].createInstance(Ci.nsIJSON);
  114.     if(!febeDataFile.exists()){
  115.       // Create the template
  116.                 
  117.         var dflt = new febeUDBuObj();
  118.         dflt.Label = febeMsg[182];
  119.         dflt.Type = 0;
  120.         dflt.Description = febeMsg[181];
  121.         dflt.Path = febeDataFile.path.replace(/\\/g,"\\");
  122.         dflt.Include = true;
  123.         
  124.         var fos = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
  125.         fos.init(febeDataFile, 0x02 | 0x08 | 0x20, 0755, 0); // write, create, truncate    
  126.         var cos = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream);
  127.         cos.init(fos, "UTF-8", 0, 0x0000);
  128.         var jstr = JSON.encode(dflt);
  129.         cos.writeString(jstr+"\n");
  130.         cos.close();
  131.     }//if
  132.     
  133.   // Read the data
  134.     var dFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
  135.     dFile.initWithPath(febeDataFile.path);
  136.         
  137.   // open an input stream from file
  138.     var fis = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
  139.     fis.init(dFile, 0x01, 0444, 0);
  140.     fis.QueryInterface(Ci.nsILineInputStream);
  141.  
  142.     var cis = Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream);
  143.     cis.init(fis,"UTF-8", 0, 0x0000);
  144.     
  145.     var lis = cis.QueryInterface(Ci.nsIUnicharLineInputStream);
  146.  
  147.   // read lines into array and parse into individual fields
  148.     febeUDBuList = [];
  149.     
  150.     var line = {}, hasmore, cnt;
  151.     cnt = 0; // Count of UDBU items
  152.     do {
  153.         hasmore = lis.readLine(line);
  154.         if(line.value.length == 0){break;}
  155.         var febeUDBuItem = JSON.decode(line.value); 
  156.         febeUDBuList[febeUDBuItem.Label] = febeUDBuItem;
  157.         cnt += 1;
  158.     } while(hasmore);
  159.     cis.close();
  160.     fis.close();
  161.     try {
  162.         document.documentElement.getButton("extra2").disabled = true;
  163.         febeUDBuStatusMsg("");
  164.     }catch(e){;;}
  165.     if(cnt == 0){return false;}
  166.     return true;
  167. }//febeUDBuInit()
  168.  
  169. function febeUDBuWrite(obj){    
  170.     var fos = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
  171.     fos.init(dFile, 0x02 | 0x08 | 0x20, 0755, 0); // write, create, truncate    
  172.     var cos = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream);
  173.     cos.init(fos, "UTF-8", 0, 0x0000);
  174.     var jstr = JSON.encode(obj);
  175.     cos.writeString(jstr+"\n");
  176. }//febeUDBuWrite()
  177.  
  178. function febeUDBuWrite(){
  179.     febeDataFile = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
  180.     febeDataFile.append(FEBEDATAFILE);
  181.     var JSON = Cc["@mozilla.org/dom/json;1"].createInstance(Ci.nsIJSON);
  182.     var fos = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
  183.     fos.init(febeDataFile, 0x02 | 0x08 | 0x20, 0755, 0); // write, create, truncate    
  184.     var cos = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream);
  185.     cos.init(fos, "UTF-8", 0, 0x0000);
  186.  
  187.     for(var i in febeUDBuList){
  188.         var jstr = JSON.encode(febeUDBuList[i]);
  189.         cos.writeString(jstr+"\n");
  190.     }//for
  191.     cos.close();
  192.     return true;
  193. }//febeUDBuWrite()
  194.  
  195. function febeUDBuDisableAll(){
  196.     document.getElementById("febeUDBuCaption").value = febeMsg[134];
  197.     document.getElementById("febeUDBuList").removeAllItems();
  198.     document.getElementById("febeUDBuList").setAttribute("label",febeMsg[135]);
  199.     document.getElementById("febeUDBuList").disabled = true;
  200.     document.getElementById("febeUDBuLabelID").disabled = true;
  201.     document.getElementById("febeUDBuLabel").disabled = true;
  202.     document.getElementById("febeUDBuTypeID").disabled = true;
  203.     document.getElementById("febeUDBuType").disabled = true;
  204.     document.getElementById("febeUDBuDescID").disabled = true;
  205.     document.getElementById("febeUDBuDesc").disabled = true;
  206.     document.getElementById("febeUDBuSourceID").disabled = true;
  207.     document.getElementById("febeUDBuSource").disabled = true;
  208.     document.getElementById("febeUDBuBrowseBtn").disabled = true;
  209.     document.getElementById("febeIncludeInBu_id").disabled = true;
  210.     document.getElementById("febeUDBuSubmitBtn").disabled = true;
  211.     document.getElementById("febeUDBuLabel").value = "";
  212.     document.getElementById("febeUDBuDesc").value = "";
  213.     document.getElementById("febeUDBuSource").value = "";
  214.     document.getElementById("febeIncludeInBu_id").checked = false;
  215.     febeUDBuStatusMsg("");
  216.     return true;
  217. }//febeUDBuDisableAll()
  218.  
  219. function febeUDBuEnableNew(){
  220.     document.getElementById("febeUDBuCaption").value = febeMsg[136];
  221.     document.getElementById("febeUDBuList").setAttribute("label",febeMsg[135]);
  222.     document.getElementById("febeUDBuList").disabled = true;
  223.     document.getElementById("febeUDBuLabelID").disabled = false;
  224.     document.getElementById("febeUDBuLabel").disabled = false;
  225.     document.getElementById("febeUDBuTypeID").disabled = false;
  226.     document.getElementById("febeUDBuType").disabled = false;
  227.     document.getElementById("febeUDBuDescID").disabled = false;
  228.     document.getElementById("febeUDBuDesc").disabled = false;
  229.     document.getElementById("febeUDBuSourceID").disabled = false;
  230.     document.getElementById("febeUDBuSource").disabled = false;
  231.     document.getElementById("febeUDBuBrowseBtn").disabled = false;
  232.     document.getElementById("febeIncludeInBu_id").disabled = false;
  233.     document.getElementById("febeUDBuSubmitBtn").disabled = false;
  234.     document.getElementById("febeUDBuLabel").value = "";
  235.     document.getElementById("febeUDBuDesc").value = "";
  236.     document.getElementById("febeUDBuSource").value = "";
  237.     document.getElementById("febeIncludeInBu_id").checked = false;
  238.     febeUDBuStatusMsg("");
  239.     return true;
  240. }//febeUDBuEnableNew()
  241.  
  242. function febeUDBuEnableEdit(){
  243.     //document.getElementById("febeUDBuList").removeAllItems();
  244.     document.getElementById("febeUDBuList").setAttribute("label",febeMsg[135]);
  245.     document.getElementById("febeUDBuList").disabled = false;
  246.     document.getElementById("febeUDBuLabelID").disabled = false;
  247.     document.getElementById("febeUDBuLabel").disabled = true;
  248.     document.getElementById("febeUDBuTypeID").disabled = false;
  249.     document.getElementById("febeUDBuType").disabled = false;
  250.     document.getElementById("febeUDBuDescID").disabled = false;
  251.     document.getElementById("febeUDBuDesc").disabled = false;
  252.     document.getElementById("febeUDBuSourceID").disabled = false;
  253.     document.getElementById("febeUDBuSource").disabled = false;
  254.     document.getElementById("febeUDBuBrowseBtn").disabled = false;
  255.     document.getElementById("febeIncludeInBu_id").disabled = false;
  256.     document.getElementById("febeUDBuSubmitBtn").disabled = false;
  257.     document.getElementById("febeUDBuLabel").value = "";
  258.     document.getElementById("febeUDBuDesc").value = "";
  259.     document.getElementById("febeUDBuSource").value = "";
  260.     document.getElementById("febeIncludeInBu_id").checked = false;
  261.     febeUDBuStatusMsg("");
  262.     return true;
  263. }//febeUDBuEnableEdit()
  264.  
  265. function febeUDBuEnableDelete(){
  266.     //document.getElementById("febeUDBuCaption").value = febeMsg[138];
  267.     document.getElementById("febeUDBuList").removeAllItems();
  268.     document.getElementById("febeUDBuList").setAttribute("label",febeMsg[135]);
  269.     document.getElementById("febeUDBuList").disabled = false;
  270.     document.getElementById("febeUDBuLabelID").disabled = false;
  271.     document.getElementById("febeUDBuLabel").disabled = true;
  272.     document.getElementById("febeUDBuTypeID").disabled = true;
  273.     document.getElementById("febeUDBuType").disabled = true;
  274.     document.getElementById("febeUDBuDescID").disabled = false;
  275.     document.getElementById("febeUDBuDesc").disabled = true;
  276.     document.getElementById("febeUDBuSourceID").disabled = false;
  277.     document.getElementById("febeUDBuSource").disabled = true;
  278.     document.getElementById("febeUDBuBrowseBtn").disabled = true;
  279.     document.getElementById("febeIncludeInBu_id").disabled = true;
  280.     document.getElementById("febeUDBuSubmitBtn").disabled = false;
  281.     document.getElementById("febeUDBuLabel").value = "";
  282.     document.getElementById("febeUDBuDesc").value = "";
  283.     document.getElementById("febeUDBuSource").value = "";
  284.     document.getElementById("febeIncludeInBu_id").checked = false;
  285.     febeUDBuStatusMsg("");
  286.     return true;
  287. }//febeUDBuEnableDelete()
  288.  
  289. function febeUDBuOK(){
  290.     febeUDBuWrite();
  291.     febeUDBuStatusMsg(febeMsg[149]);
  292.     return true;
  293. }//febeUDBuOK()
  294.  
  295. function febeUDBuCancel(){
  296.     if(febeUDBuTrxPending == true){
  297.         var style = "<style>color: red; font-weight: bold; font-size: 20px;</style>"
  298.         var tmp = style+febeMsg[139]+"\n";
  299.         tmp += style+febeMsg[140]+"\n\n";
  300.         tmp += febeMsg[141];
  301.         return febeConfirm(tmp);
  302.     }//if
  303.     return true;
  304. }//febeUDBuCancel()
  305.  
  306. function febeUDBuSubmit(){
  307.     var febeUDBuItem = new febeUDBuObj; 
  308.     febeUDBuItem.Label = document.getElementById("febeUDBuLabel").value;
  309.     febeUDBuItem.Type = document.getElementById("febeUDBuType").selectedIndex;
  310.     febeUDBuItem.Description = document.getElementById("febeUDBuDesc").value;
  311.     febeUDBuItem.Path = document.getElementById("febeUDBuSource").value;
  312.     febeUDBuItem.Include = document.getElementById("febeIncludeInBu_id").checked;
  313.     var key = febeUDBuItem.Label;
  314.     var action;
  315.     switch(febeUDBuAction){
  316.         case 1:    // New
  317.             action = febeMsg[92];
  318.             if(febeUDBuItem.Label == ""){
  319.                 febeAlert(febeMsg[142]);
  320.                 return false;
  321.             }//if
  322.             if(febeUDBuItem.Type == -1){
  323.                 febeAlert(febeMsg[160]);
  324.                 return false;
  325.             }//if
  326.             if(febeUDBuItem.Description == ""){
  327.                 febeAlert(febeMsg[143]);
  328.                 return false;
  329.             }//if
  330.             if(febeUDBuItem.Path == ""){
  331.                 febeAlert(febeMsg[144]);
  332.                 return false;
  333.             }//if
  334.             // See if label already exists
  335.             for(var tmp in febeUDBuList){
  336.                 if(tmp == key){
  337.                     febeAlert(febeMsg[145].replace("%key%",key));
  338.                     return false;
  339.                 }//if
  340.             }//for
  341.             febeUDBuList[key] = febeUDBuItem;
  342.             break;
  343.         case 2:    // Edit
  344.             action = febeMsg[93];
  345.             febeUDBuList[key] = febeUDBuItem;
  346.             break;
  347.         case 3:    // Delete
  348.             action = febeMsg[94];
  349.             delete febeUDBuList[key];
  350.             break;
  351.         default:// WTF??
  352.         ;
  353.     }//switch
  354.     febeUDBuTrxPending = true;
  355.     document.documentElement.getButton("extra2").disabled = false;
  356.     febeUDBuDisableAll();
  357.     febeUDBuStatusMsg(febeMsg[146].replace("%ACTION%",action));
  358.     return true;
  359. }//febeUDBuSubmit()
  360.  
  361. function febeUDBuPopulateListbox(){
  362.     // Clear existing items
  363.     var submenu = document.getElementById("febeUDBuList");
  364.     var children = submenu.childNodes;
  365.     var n = children.length;
  366.     for (var i = 0; i < n; i++) {
  367.         submenu.removeChild(children[0]);
  368.     }
  369.     for(var i in febeUDBuList){
  370.         document.getElementById("febeUDBuList").appendItem(febeUDBuList[i].Label,febeUDBuList[i].Label);
  371.     }//for
  372.     document.getElementById("febeUDBuList").disabled = false;
  373.     return true;
  374. }//febeUDBuPopulateListbox()
  375.  
  376. function febeUDBuDisplayData(){
  377.     var key = document.getElementById("febeUDBuList").selectedItem.value;
  378.     switch(febeUDBuAction){
  379.         case 2: 
  380.             febeUDBuEnableEdit();
  381.             break;
  382.         case 3:
  383.             febeUDBuEnableDelete();
  384.             break;
  385.     }//switch
  386.     document.getElementById("febeUDBuLabel").value = febeUDBuList[key].Label;
  387.     document.getElementById("febeUDBuType").selectedIndex = febeUDBuList[key].Type;
  388.     document.getElementById("febeUDBuDesc").value = febeUDBuList[key].Description;
  389.     document.getElementById("febeUDBuSource").value = febeUDBuList[key].Path;
  390.     document.getElementById("febeIncludeInBu_id").setAttribute("checked",febeUDBuList[key].Include);
  391.     return true;
  392. }//febeUDBuDisplayData()
  393.  
  394. function febe_fillUDBUmenu(element){
  395.   // Populate the restore UDBU submenu
  396.   
  397.     // Clear existing items
  398.     var submenu = document.getElementById(element);
  399.     var children = submenu.childNodes;
  400.     var n = children.length;
  401.     for (var i = 0; i < n; i++) {
  402.         submenu.removeChild(children[0]);
  403.     }
  404.     febeUDBuInit();
  405.     for(var i in febeUDBuList){
  406.         var oncommand = "febeRestoreUDBU('"+i+"');";
  407.         var aMenuItem=document.createElement("menuitem");
  408.         aMenuItem.setAttribute( "label" , febeUDBuList[i].Label);
  409.         aMenuItem.setAttribute( "oncommand" , oncommand);
  410.         aMenuItem.setAttribute( "tooltiptext" , febeMsg[170]+" "+febeUDBuList[i].Description);
  411.         document.getElementById(element).appendChild(aMenuItem);
  412.     }//for
  413.     return true;
  414. }//febe_fillUDBUmenu()
  415.  
  416. function febeResetUDBu(){
  417.     var style = "<style>color: red; font-weight: bold; font-size: 14px;</style>"
  418.     var tmp = style+febeMsg[174]+"\n\n";
  419.     tmp += febeMsg[175];
  420.     if(!febeConfirm(tmp)){return true;};
  421.     var febeDataFile = Cc["@mozilla.org/file/directory_service;1"]
  422.                  .getService(Ci.nsIProperties)
  423.                  .get("ProfD", Ci.nsIFile);
  424.     febeDataFile.append(FEBEDATAFILE);
  425.     if(febeDataFile.exists()){febeDataFile.remove(false);}
  426.     febeUDBuList = [];
  427.     febeUDBuInit();
  428.     febeUDBuPopulateListbox();
  429.     febeUDBuDisableAll();
  430.     febeAlert(febeMsg[176]);
  431.     return true;
  432. }//febeResetUDBu()
  433.  
  434. function febeUDBuStatusMsg(msg){
  435.     var d = document.getElementById("febeUDBustatusText");
  436.     if(d){
  437.         d.value = msg;
  438.         //sizeToContent();
  439.     }//if
  440.     return true;
  441. }//febeUDBuStatusMsg()
  442.  
  443. //febeAlert("febeDBM.js loaded");